package service.version3;


import dao.version3.UserInfoDao;
import dao.version3.UserInfoHistoryDao;
import utils.version3.ConnectionUtil;

public class UserService {

    /*

        初始改造：在此业务类中，就看不到任何的Jdbc层面的类型了。但代码不会通过编译。
        1.Connection对象无法传递给dao类型
        2.commit方法没有connection对象，无法执行。

     */
  /*    public void archive(String userid, String username) {

      ConnectionUtil.start();
        UserInfoDao needToArchive = new UserInfoDao();
        UserInfoHistoryDao archivingUser = new UserInfoHistoryDao();

        needToArchive.deleteById(userid);
        archivingUser.insert(userid, username);

        ConnectionUtil.commit();


    }
*/
    /**
     * 连接对象依据前面的分析，总是应该在服务层创建出来，为了不明显的看到把connection对象传递给dao层
     * 需要把创建出来的对象保存到某一个地方，然后dao层代码直接去取就可以了。
     *
     * 所以需要改造ConnectionUtil类的getConnection方法
     *
     * @param userid
     * @param username
     */
    public void archive(String userid, String username) {

        try {
            ConnectionUtil.start();

            UserInfoDao needToArchive = new UserInfoDao();
            UserInfoHistoryDao archivingUser = new UserInfoHistoryDao();

            needToArchive.deleteById(userid);
            archivingUser.insert(userid, username);

            ConnectionUtil.commit();
        }catch(RuntimeException e){
            ConnectionUtil.rollback();
            System.out.println(e.getMessage());
            throw e;
        }finally {
            ConnectionUtil.close();
        }


    }
}
